/**
 * @description: TODO (描述这个文件的作用) Project Name:creditcat-service, File
 * Name:ICreditCommonStrategy.java Copyright (c) 2017, 张新功,Inc.All Rights Reserved.
 */

package com.vcredit.creditcat.service.product;

import java.text.ParseException;
import java.util.Map;

import com.vcredit.creditcat.dto.product.ProductDecisionResultDto;
import com.vcredit.creditcat.enumtype.MerchantProductEnum;
import com.vcredit.creditcat.exception.ProductCanNotApplyException;
import com.vcredit.creditcat.model.Cust;
import com.vcredit.creditcat.model.CustProductApply;


/**
 * @description: TODO(描述这个类的作用)
 * @author 张新功
 * @date 2017年7月4日
 */

public interface ICreditCommonService {
  /**
   * 
  * @description: TODO(描述这个方法的作用)
  * @author: 张新功
  * @param custId
  * @param productId
  * @param productEnum
  * @return
  * @throws ProductCanNotApplyException
  * @throws ParseException
  * @throws Exception
   */
  Object prepareProductApplyUserInfo(Long custId, Long productId, MerchantProductEnum productEnum,Map<String,String> otherParams)
      throws ProductCanNotApplyException, ParseException, Exception;


  /**
  * @description: TODO(描述这个方法的作用)
  * @author: 张新功
  * @param inputDto
  * @param productEnum
  * @return
  * @throws ProductCanNotApplyException
  * @throws Exception
   */
  Object getAuditResult(Object inputDto, MerchantProductEnum productEnum)
      throws ProductCanNotApplyException, Exception;


  /**
  * @description: TODO(描述这个方法的作用)
  * @author: 张新功
  * @param cust
  * @param productEnum
  * @return
  * @throws ProductCanNotApplyException
  * @throws Exception
  */

  CustProductApply getCreditAmoutResult(CustProductApply custProductApply,
      MerchantProductEnum productEnum) throws ProductCanNotApplyException, Exception;


  /**
  * @description: TODO(描述这个方法的作用)
  * @author: 张新功
  * @param resourceCode
  * @return
  */

  String getBase64StringByCode(String resourceCode);


  /**
  * @description: TODO(描述这个方法的作用)
  * @author: 张新功
  * @param productApply
  * @throws ProductCanNotApplyException
  * @throws ParseException
  */

  void acceptable(CustProductApply productApply) throws ProductCanNotApplyException, ParseException;


  /**
  * @description: TODO(描述这个方法的作用)
  * @author: 张新功
  * @param custProductApply
  */

  void saveCustProductApply(CustProductApply custProductApply);


  /**
  * @description: TODO(描述这个方法的作用)
  * @author: 张新功
  * @param custProductApply
  */

  void recordCustProductApply(CustProductApply custProductApply);


  /**
  * @description: TODO(描述这个方法的作用)
  * @author: 张新功
  * @param paramDto
  * @throws ProductCanNotApplyException
  */

  void updateCustProductApplyByFlow(ProductDecisionResultDto paramDto)
      throws ProductCanNotApplyException;



  /**
  * @description: TODO(描述这个方法的作用)
  * @author: 张新功
  * @param productId
  * @param enumType
  * @param catCode
  * @return
  */

  String getProductEnumCode(Long productId, Integer enumType, Integer catCode);



  /**
  * @description: TODO(描述这个方法的作用)
  * @author: 张新功
  * @param cust
  * @param processId
  * @param minCode
  * @return
  * @throws Exception
  */

  Map<String, Object> getAuthMap(Cust cust, Long processId, int minCode) throws Exception;

}
